package com.neuedu.io;

import java.io.File;
import java.io.FileFilter;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * @author 金山
 * 项目：javase
 * site: https://blog.fulfill.com.cn
 * 描述
 * @data 2024/10/299:50
 */
public class MyFile {

    public static void main(String[] args) throws IOException {

        // File file =  new File("D:/upload");

        // File 代表文件 或者目录的 句柄(引用)
        File dir = new File("D:\\upload");


        // File file =  new File("D:\\upload\\abc.txt");
        // File file =  new File("D:\\upload","abc.txt");
        File file = new File(dir, "abc.txt");


        // 内存中表示文件对象  (在资源管理器中可以不存在)
        File defTxtFile = new File(dir, "a\\b\\c\\d\\def.txt");
        File removeWithEnd = new File(dir, "temp.txt");

        //创建临时文件
        removeWithEnd.createNewFile();


        //程序结束的时候删除文件，执行完此行代码，temp.txt 文件还在硬盘中  ,当执行到最后一行的时候  在观察文件夹就删除了
        removeWithEnd.deleteOnExit();

        // 是否是目录
        System.out.println("dir.getPath() = " + dir.getPath());
        System.out.println("dir.isDirectory() = " + dir.isDirectory());


        // 是否是文件
        System.out.println("file.getPath() = " + file.getPath());
        System.out.println("file.isFile() = " + file.isFile());


        System.out.println("defTxtFile = " + defTxtFile);
        // 判断文件是否存在
        System.out.println("defTxtFile.exists() = " + defTxtFile.exists());
        if (!defTxtFile.exists()) {
            System.out.println("文件不存在，创建文件 ");


            // 上级目录
            if (!defTxtFile.getParentFile().exists()) {
                // 如果上级目录不存在，则创建目录
                File parent = defTxtFile.getParentFile();

                System.out.println("目录不存在parent.getPath() = " + parent.getPath());
                // boolean mkdir = parent.mkdir();  //创建1级目录
                boolean mkdir = parent.mkdirs();  // 创建创建多级目录
                System.out.println("mkdir = " + mkdir);

            }

            boolean newFile = defTxtFile.createNewFile();  // 如果上级目录不存在则  创建失败  java.io.IOException: 系统找不到指定的路径。


            System.out.println("newFile = " + newFile);
        }


        System.out.println();
        // 获取是否拥有读写执行的权限
        // System.out.println("file.canRead() = " + file.canRead());
        // System.out.println("file.canWrite() = " + file.canWrite());
        // System.out.println("file.canExecute() = " + file.canExecute());



        //equals比较file对象是否是一个文件
        // File dirD1 = new File("d:\\");
        // File dirD2 = new File("D:\\");
        // System.out.println("dirD1.equals(dirD1) = " + dirD1.equals(dirD1));


        // 常量
        System.out.println();
        // System.out.println("File.pathSeparator = " + File.pathSeparator);
        // System.out.println("File.pathSeparatorChar = " + File.pathSeparatorChar);
        // System.out.println("File.pathSeparator = " + File.separator);
        // System.out.println("File.separatorChar = " + File.separatorChar);

        System.out.println();
        // for (int i = 0; i < 10; i++) {
        //     File tempFile = File.createTempFile("java-", ".txt");
        //
        //     // dir -- D:\\upload
        //     File uploadTempFile = File.createTempFile("java-", ".txt", dir);
        //
        //     System.out.println("创建临时文件： tempFile = " + tempFile);
        //     System.out.println("创建临时文件： uploadTempFile = " + uploadTempFile);
        // }


        System.out.println("遍历目录");
        // 返回当前目录中 的所有file对象（目录、文件）  不包含子目录 不递归
        // String[] list = dir.list();
        // for (String fileName : list) {
        //     System.out.println("fileName = " + fileName);
        // }

        File[] list = dir.listFiles();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
        for (File listFileItem : list) {
            System.out.printf("name: %s\t\tsize:%d\t\t是否隐藏文件:%s\t\t最后一次修改时间:%s\r\n ,",
                    listFileItem.getName(),
                    listFileItem.length(),
                    listFileItem.isHidden(),
                    sdf.format( new Date(listFileItem.lastModified()) )

            );
        }



        File currentFile = new File(".");

        System.out.println("new File(\".\").getPath() = " + currentFile.getPath());
        System.out.println("new File(\".\").getAbsolutePath() = " + currentFile.getAbsolutePath());



        File originDir = new File("D:\\upload");
        File doc = new File(originDir,"test1.doc");


        File distDir = new File("E:\\upload");
        File distFile = new File(distDir,"test1.doc");



        //重命名文件， 间接的实现文件移动  mv
        boolean renameSuccess =  doc.renameTo(distFile);

        System.out.println("renameSuccess = " + renameSuccess);


        //删除空目录 或者文件
        // listFiles  FileFilter
        File[] startWidthJavaFiles = dir.listFiles((File pathname) -> pathname.getName().startsWith("java-"));
        System.out.println("startWidthJavaFiles.length = " + startWidthJavaFiles.length);

        //执行删除
        boolean delete = startWidthJavaFiles[0].delete();

        System.out.println(delete);


        //不存在的文件进行删除 返回 false
        File file1 = new File("D\\abc\\def\\qqq\\abc.txt");
        System.out.println("D\\abc\\def\\qqq\\abc.txt.delete() = " + file1.delete());

    }
}
